/**
 * 全局混入
 * 在所有组件中都可以使用的方法和属性
 */
export default {
  data() {
    return {
      // 全局数据
    }
  },
  methods: {
    /**
     * 显示消息提示
     * @param {string} title - 提示内容
     * @param {string} icon - 提示图标，可选 'none', 'success', 'loading'
     * @param {number} duration - 提示显示时间（毫秒）
     */
    showToast(title, icon = 'none', duration = 2000) {
      uni.showToast({
        title,
        icon,
        duration
      });
    },

    /**
     * 显示加载提示
     * @param {string} title - 加载提示内容
     */
    showLoading(title = '加载中...') {
      uni.showLoading({
        title,
        mask: true
      });
    },

    /**
     * 隐藏加载提示
     */
    hideLoading() {
      uni.hideLoading();
    },

    /**
     * 显示确认对话框
     * @param {string} title - 对话框标题
     * @param {string} content - 对话框内容
     * @returns {Promise} - 返回Promise，确认返回true，取消返回false
     */
    showConfirm(title, content) {
      return new Promise((resolve) => {
        uni.showModal({
          title,
          content,
          success: (res) => {
            if (res.confirm) {
              resolve(true);
            } else {
              resolve(false);
            }
          },
          fail: () => {
            resolve(false);
          }
        });
      });
    },

    /**
     * 处理图片URL，添加完整的服务器地址
     * @param {string} imageUrl - 原始图片URL
     * @returns {string} 处理后的完整图片URL
     */
    processImageUrl(imageUrl) {
      if (!imageUrl) return '';
      
      // 如果已经是完整的HTTP/HTTPS URL，直接返回
      if (/^https?:\/\//.test(imageUrl)) {
        return imageUrl;
      }
      
      // 如果不是以/image开头，添加/image前缀
      if (!imageUrl.startsWith('/image')) {
        imageUrl = '/image' + imageUrl.replace(/^\/static/, '');
      }
      
      // 添加完整的服务器地址
      return 'http://localhost:9001' + imageUrl;
    },
    
    /**
     * 格式化阅读数
     * @param {number} count - 阅读数
     * @returns {string} 格式化后的阅读数
     */
    formatReadCount(count) {
      if (!count) return '0';
      count = Number(count);
      if (count >= 1000) {
        return (count / 1000).toFixed(1) + 'k';
      }
      return count.toString();
    },
    
    /**
     * 格式化日期
     * @param {string} dateStr - 日期字符串
     * @returns {string} 格式化后的日期
     */
    formatDate(dateStr) {
      if (!dateStr) return '未知时间';
      // 兼容iOS日期格式
      const safeStr = dateStr.replace(/-/g, '/');
      const date = new Date(safeStr);
      const now = new Date();
      if (isNaN(date.getTime())) return '未知时间';
      const diff = (now - date) / 1000;
      if (diff < 60) {
        return '刚刚';
      } else if (diff < 3600) {
        return Math.floor(diff / 60) + '分钟前';
      } else if (diff < 86400) {
        return Math.floor(diff / 3600) + '小时前';
      } else if (diff < 2592000) {
        return Math.floor(diff / 86400) + '天前';
      } else {
        const year = date.getFullYear();
        const month = (date.getMonth() + 1).toString().padStart(2, '0');
        const day = date.getDate().toString().padStart(2, '0');
        return `${year}-${month}-${day}`;
      }
    },

    /**
     * 跳转到页面
     * @param {string} url - 页面路径
     * @param {object} params - 页面参数
     */
    navigateTo(url, params = {}) {
      // 判空和类型校验，防止 params 为 null/undefined 或非对象
      if (!params || typeof params !== 'object') {
        params = {};
      }
      let queryString = '';
      if (Object.keys(params).length > 0) {
        queryString = '?' + Object.keys(params)
          .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`)
          .join('&');
      }
      uni.navigateTo({
        url: url + queryString
      });
    }
  }
} 